package com.itqf.ipmsys.utils;

import com.alibaba.fastjson.JSONObject;

import java.util.Map;

/**
 * @author corn
 * @create 2021-09-24 16:16
 * @Description:
 * 封装restapi 的返回结果类型
 * 这个类是通用的返回结果
 * 这个类要支持链式编程
 */
public class R {
    /**
     * 这是响应代码
     */
    private int code;
    /**
     * 这是响应摘要信息
     */
    private String msg;
    /**
     * 这里应该使用Object类型。
     */
    private Object data;

    public static final int OK_200=200;
    public static final int E_500=500;
    public static final int IS_OK=100;

    public boolean isOK(){
        if(this.code/IS_OK==2){
            return true;
        }
        return false;
    }
    public R setCode(int code) {
        this.code = code;
        return this;
    }
    public R setMsg(String msg) {
        this.msg = msg;
        return this;
    }
    public R setData(Object result) {
        this.data = result;
        return this;
    }
    public R setData(String key,Object value){
        //当data为空时，添加数据到jsonObject对象中的map
        if(data==null){
            JSONObject result=new JSONObject();
            result.put(key,value);
            this.data=result;
        }else{
            //不为空时，判断result是否是jsonObject类的对象
            if(data instanceof JSONObject){
                ((JSONObject)data).put(key,value);
            }
            //或者为map
            if(data instanceof Map){
                ((Map)data).put(key,value);
            }
        }
        return this;
    }

    /**
     * 调用成功的方法
     * @return
     */
    public static R ok(){
        R r=new R().setCode(200).setMsg("请求成功");
        return r;
    }
    public static R ok(int code){
        R r=new R().setCode(code).setMsg("请求成功");
        return r;
    }
    public static R ok(String msg){
        R r=new R().setCode(200).setMsg(msg);
        return r;
    }
    public static R ok(int code,String msg){
        R r=new R().setCode(code).setMsg(msg);
        return r;
    }
    public static R ok(Object data){
        return ok().setData(data);
    }

    /**
     * 调用失败的方法
     * @return
     */
    public static R error(){
        R r=new R().setCode(500).setMsg("请求失败");
        return r;
    }
    public static R error(int code){
        R r=new R().setCode(code).setMsg("请求失败");
        return r;
    }
    public static R error(String msg){
        R r=new R().setCode(500).setMsg(msg);
        return r;
    }
    public static R error(int code,String msg){
        R r=new R().setCode(code).setMsg(msg);
        return r;
    }
    public static R error(Object data){
        return error().setData(data);
    }

    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
    public Object getData() {
        return data;
    }


    /**
     * r转json的方法
     */
    public String toJsonString(R r){
        return JSONObject.toJSONString(r);
    }

    @Override
    public String toString() {
        return toJsonString(this);
    }
}
